use crate::q::Solution;

#[allow(unused)]
impl Solution {
    pub fn k_weakest_rows(mat: Vec<Vec<i32>>, k: i32) -> Vec<i32> {
        // 方法1
        // 构建一个以mat的每个row的1的个数作为下标的数组arr(vec![vec![];n.len())，如果row.count(1)相同，则依次添加
        // 迭代mat的row,放入arr
        // 拉平arr则为结果
        // Passed 0ms 2.2mb
        let mut arr = vec![vec![]; mat[0].len() + 1];
        for m in 0..mat.len() {
            let mut soldiers = 0;
            for n in 0..mat[m].len() {
                if mat[m][n] == 0 { break; } else { soldiers += 1; }
            }
            arr[soldiers].push(m as i32);
        }
        arr.into_iter().flatten().take(k as usize).collect()

        // 方法2，
        // 不用额外弄个数组，直接在原mat上map每个值的1的个数和它的序号，然后带着序号排序，再map排序之后的数组并返回
        // Passed 0ms 2.2mb
        // let mut mat: Vec<(i32, i32)> = mat.iter().enumerate().map(|(i, row)| (i as i32, row.iter().sum())).collect();
        // mat.sort_by(|a, b| a.1.cmp(&b.1));
        // mat.into_iter().take(k as usize).map(|(i, _)| i).collect()
    }
}

#[test]
fn test_q1337() {
    assert_eq!(Solution::k_weakest_rows(vec![vec![1, 1, 0, 0, 0], vec![1, 1, 1, 1, 0], vec![1, 0, 0, 0, 0], vec![1, 1, 0, 0, 0], vec![1, 1, 1, 1, 1]], 3), vec![2, 0, 3]);
    assert_eq!(Solution::k_weakest_rows(vec![vec![1, 0, 0, 0],
                                             vec![1, 1, 1, 1],
                                             vec![1, 0, 0, 0],
                                             vec![1, 0, 0, 0]], 2), vec![0, 2]);
    assert_eq!(Solution::k_weakest_rows(vec![vec![1, 0, 0, 0],
                                             vec![1, 1, 1, 1],
                                             vec![1, 0, 0, 0],
                                             vec![0, 0, 0, 0]], 2), vec![3, 0]);
    assert_eq!(Solution::k_weakest_rows(vec![vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0],
                                             vec![1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                                             vec![1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
                                             vec![1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
                                             vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0],
                                             vec![0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0],
                                             vec![1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0]],
                                        7), vec![17, 21, 3, 7, 12, 25, 1]);
}